using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using System.Reflection;
using Microsoft.SharePoint.Navigation;
using Microsoft.SharePoint.Administration;

namespace DocumentLibraryAndReview.Features.Feature3
{
    /// <summary>
    /// This class handles events raised during feature activation, deactivation, installation, uninstallation, and upgrade.
    /// </summary>
    /// <remarks>
    /// The GUID attached to this class may be used during packaging and should not be modified.
    /// </remarks>

    [Guid("2b70c086-500b-4f35-98e7-0ebd2f3d0a9a")]
    [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
    [SharePointPermission(SecurityAction.InheritanceDemand, ObjectModel = true)]    
    public class Feature3EventReceiver : SPFeatureReceiver
    {
        // Uncomment the method below to handle the event raised after a feature has been activated.

        //public override void FeatureActivated(SPFeatureReceiverProperties properties)
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            try
            {
                SPDiagnosticsService diagnosticsService = SPDiagnosticsService.Local;
                SPDiagnosticsCategory cat = diagnosticsService.Areas["SharePoint Foundation"].Categories["FAB40"];

                string format = "FAB40.DocumentLibraryAndReview FeatureActivated {0} in area {1}";
                diagnosticsService.WriteTrace(1, cat, TraceSeverity.Medium, format, cat.Name, cat.Area.Name);

                SPWeb web = (SPWeb)properties.Feature.Parent;
                SPList list = web.Lists[SPUtility.GetLocalizedString("$Resources:tsa,DRDocumentsForReviewListFolder;", "tsa", web.Language)];
                if (list != null)
                {
                    //AssemblyName name = Assembly.GetExecutingAssembly().GetName();
                    list.EnableVersioning = true;
                    list.EnableMinorVersions = true;
                    //string str = name.ToString();
                    // str = str.Substring(str.IndexOf("PublicKeyToken=") + 15);
                    list.EventReceivers.Add(SPEventReceiverType.ItemAdded, string.Format("DocumentReviewEventHandler, Version={0}, Culture=neutral, PublicKeyToken={1}", "12.0.0.0", "71e9bce111e9429c"), "Microsoft.SharePoint.ApplicationTemplates.DocumentReviewEventHandler");
                    list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, string.Format("DocumentReviewEventHandler, Version={0}, Culture=neutral, PublicKeyToken={1}", "12.0.0.0", "71e9bce111e9429c"), "Microsoft.SharePoint.ApplicationTemplates.DocumentReviewEventHandler");
                    list.Update();
                }

                format = "FAB40.DocumentLibraryAndReview FeatureActivated - End {0} in area {1}";
                diagnosticsService.WriteTrace(1, cat, TraceSeverity.Medium, format, cat.Name, cat.Area.Name);
            }
            catch (Exception ex)
            {
                SPDiagnosticsService diagnosticsService = SPDiagnosticsService.Local;
                SPDiagnosticsCategory cat = diagnosticsService.Areas["SharePoint Foundation"].Categories["FAB40"];

                string format = "FAB40.DocumentLibraryAndReview FeatureActivated {0} in area {1}. Error {2}";
                diagnosticsService.WriteTrace(1, cat, TraceSeverity.Medium, format, cat.Name, cat.Area.Name, ex.Message);

                throw;
            }  
        }


        public SPNavigationNode FindNodeFromID(int nodeID, SPNavigationNodeCollection collection)
        {
            int num = collection.Count;
            int num2 = 0;
            while (num2 < num)
            {
                if (collection[num2].Id != nodeID)
                {
                    num2++;
                    continue;
                }
                return collection[num2];
            }
            return null;
        } 



        // Uncomment the method below to handle the event raised before a feature is deactivated.

        //public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised after a feature has been installed.

        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        //{
        //}


        // Uncomment the method below to handle the event raised before a feature is uninstalled.

        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        //{
        //}

        // Uncomment the method below to handle the event raised when a feature is upgrading.

        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        //{
        //}
    }
}
